package cn.edu.ctgu.experiment_3;


import java.time.LocalDateTime;
import java.time.ZoneId;

/* 软件测试实验四：决策表分析方法 */
public class BillCalculator {

    /**
     *
     * @param startTime：开始时间
     * @param endTime：结束时间
     * @param zoneId：时区Id
     * @return 通话时长，按分钟计时
     */
    public int calculateTimeSpan(final LocalDateTime startTime, final LocalDateTime endTime, final String zoneId) {
        long startStamp = startTime.atZone(ZoneId.of(zoneId)).toInstant().toEpochMilli();
        long endStamp = endTime.atZone(ZoneId.of(zoneId)).toInstant().toEpochMilli();
        long disTime = endStamp - startStamp;
        int disMin; //通话时长按分钟计算
        if (disTime < 0) {
            disMin = -1;
        } else {
            disMin = (int) (Math.ceil(disTime / (Constant.KILO * Constant.SIXTY_F)));
        }
        return disMin;
    }

    /**
     *
     * @param timeLength    通话时长，单位：分钟
     * @return  返回通话费用，单位：美分
     */
    public int calculateFee(final int timeLength) {
        if (timeLength < 0) {
            return -1;
        } else if (timeLength <= Constant.AREA_ONE) {
            return Constant.FIVE_CENT * timeLength;
        } else if (timeLength <= Constant.AREA_TWO) {
            return Constant.ONE_DOLLAR + Constant.TEN_CENT * (timeLength - Constant.AREA_ONE);
        } else {
            //没有超过30个小时的通话
            return -1;
        }
    }
}
